package innerclass;

import java.util.Arrays;
import java.util.Comparator;

public class Test1 {
    public static void main(String[] args) {
        //目标：完成数组排序，理解匿名内部类的用法
        // 1.定义一个5个对象的数组，元素是外部类对象
        Outer[] o = new Outer[5];
        o[0] = new Outer("jack", 12, 1.85);
        o[1] = new Outer("tom", 20, 1.75);
        o[2] = new Outer("lucy", 33, 1.65);
        o[3] = new Outer("mary", 35, 1.55);
        o[4] = new Outer("kate", 16, 1.45);

        //需求：按钮年龄升序排序。可以调用sun公司写好的API直接对数组进行排序
        //public static <T> void sort(T[] a, Comparator<? super T> c)
        //参数一：需要排序的数组
        //参数二：需要给sort声明一个Comparator比较器对象（指定排序的规则）

        //sort方法，内部会调用匿名内部类对象的compare方法，比较两个元素，返回一个整数
        //匿名内部类，实现Comparator接口，重写compare方法
        Arrays.sort(o, new Comparator<Outer>() {//Outer 泛型参数，表示数组元素类型
            @Override
            public int compare(Outer o1, Outer o2) {
                //指定排序规则：
                //左边对象 大于 右边，返回正整数
                //左边对象 小于 右边，返回负整数
                //左边对象 等于 右边，返回0
//                if (o1.getAge() > o2.getAge())
//                    return 1;
//                else if (o1.getAge() < o2.getAge())
//                    return -1;
//                else
//                    return 0;

                return o1.getAge() - o2.getAge();
            }
        });


        //遍历数组并输出
        for (int i = 0; i < o.length; i++) {
            Outer temp = o[i];
            System.out.println(temp);
        }
    }
}
